HDU_5835

描述

送礼物,给出礼物种类和个数,给出要求。问最多能送多少人;

  1. 所有人坐一排。
  2. 每人两个礼物,一个神秘,一个基本礼物。
  3. 相邻的基本礼物不能相同,神秘礼物无限制。
  4. 礼物要连续分发。

思路

首先,最理想的情况是分礼物总和数sum/2个人
先假设让礼物数最多的A,铺满sum/2的长度。如果这时候A还有大于(sum/2 + 1)个,那么A肯定会有剩余。
其他情况都是sum/2。
A > (sum/2)+(sum/2 +1)时,只能满足2 * (sum-A)+1

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <cstdio>
#include <stack>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
int a[15];
int main()
{
int n,m,T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ll sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
int ans,i,f=1;
for(i=n-1;i>=0;i--)
if(a[i]>sum/2+(sum/2+1)/2)
f=0;break;
if(f)ans=sum/2;
else ans=2*(sum-a[i])+1;
printf("Case #%d: %d\n",cas++,ans);
}
return 0;
}